package main

import "fmt"

func main() {
	var by byte = 123
	var i int64 = 10
	var boolean bool = false
	var f32 float32 = 3.14
	var f64 float64 = 3.1415926
	var str string = "hello world"
	fmt.Printf("mian 函数中的变量 by 的内存地址是 %p , 值为： %v\n", &by, by)
	fmt.Printf("mian 函数中的变量 i 的内存地址是 %p , 值为： %v\n", &i, i)
	fmt.Printf("mian 函数中的变量 boolean 的内存地址是 %p , 值为： %v\n", &boolean, boolean)
	fmt.Printf("mian 函数中的变量 f32 的内存地址是 %p , 值为： %v\n", &f32, f32)
	fmt.Printf("mian 函数中的变量 f64 的内存地址是 %p , 值为： %v\n", &f64, f64)
	fmt.Printf("mian 函数中的变量 str 的内存地址是 %p , 值为： %v\n", &str, str)
	fmt.Println("=======================函数调用前=============")
	callByValue(by, i, boolean, f32, f64, str)
	fmt.Println("=======================函数调用后=============")
	fmt.Printf("被调函数中修改形参的值，main 函数中打印结果为（不变）: %v\n", by)
	fmt.Printf("被调函数中打印结果为：%v\n", i)
	fmt.Printf("被调函数中打印结果为：%v\n", boolean)
	fmt.Printf("被调函数中打印结果为：%v\n", f32)
	fmt.Printf("被调函数中打印结果为：%v\n", f64)
	fmt.Printf("被调函数中打印结果为：%v\n", str)
}

func callByValue(by byte, i int64, boolean bool, f32 float32, f64 float64, str string) {
	fmt.Printf("被调函数中，形参的 by 内存地址是：%p ,值为：%v \n", &by, by)

	fmt.Printf("被调函数中，形参的 i 内存地址是：%p ,值为：%v \n", &i, i)
	fmt.Printf("被调函数中，形参的 boolean 内存地址是：%p ,值为：%v \n", &boolean, boolean)
	fmt.Printf("被调函数中，形参的 f32 内存地址是：%p ,值为：%v \n", &f32, f32)
	fmt.Printf("被调函数中，形参的 f64 内存地址是：%p ,值为：%v \n", &f64, f64)
	fmt.Printf("被调函数中，形参的 str 内存地址是：%p ,值为：%v \n", &str, str)
	fmt.Println("=======================函数内部修改值=============")
	by = 10
	i = 20
	boolean = true
	f32 = 13.14
	f64 = 13.146666
	str = "hello golang"
}
